#pragma once

#include <iostream>
#include <string>
#include <unordered_map>
#include <fstream> // ????

#include "Log.hpp"
#include "Common.hpp"
const std::string gpath = "./";
const std::string gdictname = "dict.txt";
const std::string gsep = ": ";

using namespace LogMudule;
class Dict
{
public:
    Dict(const std::string &path = gpath,const std::string &filename = gdictname)
    :_path(path)
    ,_filename(filename)
    {
        LoadDictionary();
    }

    void LoadDictionary()
    {
        // pwd
        std::string file = _path + _filename;
        std::ifstream in(file.c_str()); 
        if( ! in.is_open())
        {
            LOG(LogLevel::ERROR) << "open file" <<file << "error";
            return;
        }

        std::string line;
        while(std::getline(in,line))
        {
            // apple: 苹果
            std::string key;
            std::string value;
            if (SplitString(line,&key,&value, gsep)) // line -> key value
            {
                _dictionary.insert(std::make_pair(key,value));
            }
        }

        in.close();
    }

    std::string Translate(const std::string &word)
    {
        auto iter = _dictionary.find(word);
        if(iter == _dictionary.end())
        {
            return "None";
        }
        
        return iter->second;
    }

    ~Dict()
    {

    }
private:
    std::unordered_map<std::string,std::string> _dictionary;
    std::string _path;
    std::string _filename;
};